home *** CD-ROM | disk | FTP | other *** search
/ Game Programming in C++ - Start to Finish / GameProgrammingS.iso / developer_install / CEGUISDK-0.4.1-VC6-Native.exe / {app} / include / falagard / CEGUIFalWidgetLookFeel.h < prev    next >
Encoding:
C/C++ Source or Header  |  2005-11-17  |  9.5 KB  |  319 lines

  1. /************************************************************************
  2.     filename:   CEGUIFalWidgetLookFeel.h
  3.     created:    Mon Jun 13 2005
  4.     author:     Paul D Turner <paul@cegui.org.uk>
  5. *************************************************************************/
  6. /*************************************************************************
  7.     Crazy Eddie's GUI System (http://www.cegui.org.uk)
  8.     Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
  9.  
  10.     This library is free software; you can redistribute it and/or
  11.     modify it under the terms of the GNU Lesser General Public
  12.     License as published by the Free Software Foundation; either
  13.     version 2.1 of the License, or (at your option) any later version.
  14.  
  15.     This library is distributed in the hope that it will be useful,
  16.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  18.     Lesser General Public License for more details.
  19.  
  20.     You should have received a copy of the GNU Lesser General Public
  21.     License along with this library; if not, write to the Free Software
  22.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  23. *************************************************************************/
  24. #ifndef _CEGUIFalWidgetLookFeel_h_
  25. #define _CEGUIFalWidgetLookFeel_h_
  26.  
  27. #include "falagard/CEGUIFalStateImagery.h"
  28. #include "falagard/CEGUIFalWidgetComponent.h"
  29. #include "falagard/CEGUIFalImagerySection.h"
  30. #include "falagard/CEGUIFalPropertyInitialiser.h"
  31. #include "falagard/CEGUIFalPropertyDefinition.h"
  32. #include "falagard/CEGUIFalNamedArea.h"
  33. #include <map>
  34.  
  35. #if defined(_MSC_VER)
  36. #    pragma warning(push)
  37. #    pragma warning(disable : 4251)
  38. #endif
  39.  
  40.  
  41. // Start of CEGUI namespace section
  42. namespace CEGUI
  43. {
  44.     /*!
  45.     \brief
  46.         Class that encapsulates look & feel information for a particular widget type.
  47.     */
  48.     class CEGUIEXPORT WidgetLookFeel
  49.     {
  50.     public:
  51.         WidgetLookFeel(const String& name);
  52.         WidgetLookFeel() {}
  53.  
  54.         /*!
  55.         \brief
  56.             Return a const reference to the StateImagery object for the specified state.
  57.  
  58.         \return
  59.             StateImagery object for the requested state.
  60.         */
  61.         const StateImagery& getStateImagery(const CEGUI::String& state) const;
  62.  
  63.         /*!
  64.         \brief
  65.             Return a const reference to the ImagerySection object with the specified name.
  66.  
  67.         \return
  68.             ImagerySection object with the specified name.
  69.         */
  70.         const ImagerySection& getImagerySection(const CEGUI::String& section) const;
  71.  
  72.         /*!
  73.         \brief
  74.             Return the name of the widget look.
  75.  
  76.         \return
  77.             String object holding the name of the WidgetLookFeel.
  78.         */
  79.         const String& getName() const;
  80.  
  81.         /*!
  82.         \brief
  83.             Add an ImagerySection to the WidgetLookFeel.
  84.  
  85.         \param section
  86.             ImagerySection object to be added.
  87.  
  88.         \return Nothing.
  89.         */
  90.         void addImagerySection(const ImagerySection& section);
  91.  
  92.         /*!
  93.         \brief
  94.             Add a WidgetComponent to the WidgetLookFeel.
  95.  
  96.         \param widget
  97.             WidgetComponent object to be added.
  98.  
  99.         \return Nothing.
  100.         */
  101.         void addWidgetComponent(const WidgetComponent& widget);
  102.  
  103.         /*!
  104.         \brief
  105.             Add a state specification (StateImagery object) to the WidgetLookFeel.
  106.  
  107.         \param section
  108.             StateImagery object to be added.
  109.  
  110.         \return Nothing.
  111.         */
  112.         void addStateSpecification(const StateImagery& state);
  113.  
  114.         /*!
  115.         \brief
  116.             Add a property initialiser to the WidgetLookFeel.
  117.  
  118.         \param initialiser
  119.             PropertyInitialiser object to be added.
  120.  
  121.         \return Nothing.
  122.         */
  123.         void addPropertyInitialiser(const PropertyInitialiser& initialiser);
  124.  
  125.         /*!
  126.         \brief
  127.             Clear all ImagerySections from the WidgetLookFeel.
  128.  
  129.         \return
  130.             Nothing.
  131.         */
  132.         void clearImagerySections();
  133.  
  134.         /*!
  135.         \brief
  136.             Clear all WidgetComponents from the WidgetLookFeel.
  137.  
  138.         \return
  139.             Nothing.
  140.         */
  141.         void clearWidgetComponents();
  142.  
  143.         /*!
  144.         \brief
  145.             Clear all StateImagery objects from the WidgetLookFeel.
  146.  
  147.         \return
  148.             Nothing.
  149.         */
  150.         void clearStateSpecifications();
  151.  
  152.         /*!
  153.         \brief
  154.             Clear all PropertyInitialiser objects from the WidgetLookFeel.
  155.  
  156.         \return
  157.             Nothing.
  158.         */
  159.         void clearPropertyInitialisers();
  160.  
  161.         /*!
  162.         \brief
  163.             Initialise the given window using PropertyInitialsers and component widgets
  164.             specified for this WidgetLookFeel.
  165.  
  166.         \param widget
  167.             Window based object to be initialised.
  168.  
  169.         \return
  170.             Nothing.
  171.         */
  172.         void initialiseWidget(Window& widget) const;
  173.  
  174.         /*!
  175.         \brief
  176.             Return whether imagery is defined for the given state.
  177.  
  178.         \param state
  179.             String object containing name of state to look for.
  180.  
  181.         \return
  182.             - true if imagery exists for the specified state,
  183.             - false if no imagery exists for the specified state.
  184.         */
  185.         bool isStateImageryPresent(const String& state) const;
  186.  
  187.         /*!
  188.         \brief
  189.             Adds a named area to the WidgetLookFeel.
  190.  
  191.         \param area
  192.             NamedArea to be added.
  193.  
  194.         \return
  195.             Nothing.
  196.         */
  197.         void addNamedArea(const NamedArea& area);
  198.  
  199.         /*!
  200.         \brief
  201.             Clear all defined named areas from the WidgetLookFeel
  202.  
  203.         \return
  204.             Nothing.
  205.         */
  206.         void clearNamedAreas();
  207.  
  208.         /*!
  209.         \brief
  210.             Return the NamedArea with the specified name.
  211.  
  212.         \param name
  213.             String object holding the name of the NamedArea to be returned.
  214.  
  215.         \return
  216.             The requested NamedArea object.
  217.         */
  218.         const NamedArea& getNamedArea(const String& name) const;
  219.  
  220.         /*!
  221.         \brief
  222.             return whether a NamedArea object with the specified name exists for this WidgetLookFeel.
  223.  
  224.         \param name
  225.             String holding the name of the NamedArea to check for.
  226.  
  227.         \return
  228.             - true if a named area with the requested name is defined for this WidgetLookFeel.
  229.             - false if no such named area is defined for this WidgetLookFeel.
  230.         */
  231.         bool isNamedAreaDefined(const String& name) const;
  232.  
  233.         /*!
  234.         \brief
  235.             Layout the child widgets defined for this WidgetLookFeel which are attached to the given window.
  236.  
  237.         \param owner
  238.             Window object that has the child widgets that require laying out.
  239.  
  240.         \return
  241.             Nothing.
  242.         */
  243.         void layoutChildWidgets(const Window& owner) const;
  244.  
  245.         /*!
  246.         \brief
  247.             Adds a property definition to the WidgetLookFeel.
  248.  
  249.         \param propdef
  250.             PropertyDefinition to be added.
  251.  
  252.         \return
  253.             Nothing.
  254.         */
  255.         void addPropertyDefinition(const PropertyDefinition& propdef);
  256.  
  257.         /*!
  258.         \brief
  259.             Clear all defined property definitions from the WidgetLookFeel
  260.  
  261.         \return
  262.             Nothing.
  263.         */
  264.         void clearPropertyDefinitions();
  265.  
  266.         /*!
  267.         \brief
  268.             Writes an xml representation of this WidgetLookFeel to \a out_stream.
  269.  
  270.         \param out_stream
  271.             Stream where xml data should be output.
  272.  
  273.         \return
  274.             Nothing.
  275.         */
  276.         void writeXMLToStream(OutStream& out_stream) const;
  277.  
  278.         /*!
  279.         \brief
  280.             Uses the WindowManager to rename the child windows that are
  281.             created for this WidgetLookFeel.
  282.  
  283.         \param widget
  284.             The target Window containing the child windows that are to be
  285.             renamed.
  286.  
  287.         \param newBaseName
  288.             String object holding the new base name that will be used when
  289.             constructing new names for the child windows.
  290.         */
  291.         void renameChildren(const Window& widget, const String& newBaseName) const;
  292.  
  293.     private:
  294.         typedef std::map<String, StateImagery>    StateList;
  295.         typedef std::map<String, ImagerySection>  ImageryList;
  296.         typedef std::map<String, NamedArea>       NamedAreaList;
  297.         typedef std::vector<WidgetComponent>      WidgetList;
  298.         typedef std::vector<PropertyInitialiser>  PropertyList;
  299.         typedef std::vector<PropertyDefinition>   PropertyDefinitionList;
  300.  
  301.         CEGUI::String   d_lookName;         //!< Name of this WidgetLookFeel.
  302.         ImageryList     d_imagerySections;  //!< Collection of ImagerySection objects.
  303.         WidgetList      d_childWidgets;     //!< Collection of WidgetComponent objects.
  304.         StateList       d_stateImagery;     //!< Collection of StateImagery objects.
  305.         PropertyList    d_properties;       //!< Collection of PropertyInitialser objects.
  306.         NamedAreaList   d_namedAreas;       //!< Collection of NamedArea objects.
  307.         mutable PropertyDefinitionList  d_propertyDefinitions;  //!< Collection of PropertyDefinition objects.
  308.     };
  309.  
  310.  
  311. } // End of  CEGUI namespace section
  312.  
  313.  
  314. #if defined(_MSC_VER)
  315. #    pragma warning(pop)
  316. #endif
  317.  
  318. #endif  // end of guard _CEGUIFalWidgetLookFeel_h_
  319.